#include"ringQueue.hpp"
void* Produce(void* args)
{
    ringQueue<int>* rq = (ringQueue<int>*)args;

    while (true)
    {
        // 创建数据
        int data = rand() % 100 +1 ;
        // 生产者将数据存入交易场所中（环形队列）
        rq->push(data);
        printf("生产者--%p: %d\n",pthread_self(),data);
        sleep(1);
    }
}

void* Consume(void* args)
{
    ringQueue<int>* rq = (ringQueue<int>*)args;

    while(true)
    {
        // 消费者从交易场所取出数据并做后续处理
        int data;
        rq->pop(&data);
        printf("消费者--%p: %d\n", pthread_self(),data);
        sleep(1);
    }
}

int main()
{
    //用随机数模拟数据
    srand((unsigned int)time(nullptr)^getpid());

    //创建交易场所：环形队列
    ringQueue<int>* rq = new ringQueue<int>();

    //创建并初始化生产者、消费者线程
    pthread_t ptor[2], cmer[2];
    pthread_create(ptor, nullptr, Produce, (void*)rq);
    pthread_create(ptor+1, nullptr, Produce, (void*)rq);
    pthread_create(cmer, nullptr, Consume, (void*)rq);
    pthread_create(cmer+1, nullptr, Consume, (void*)rq);

    //线程捕获
    pthread_join(ptor[0],nullptr);
    pthread_join(ptor[1],nullptr);
    pthread_join(cmer[0],nullptr);
    pthread_join(cmer[1],nullptr);

    delete rq;

    return 0;
}